package 泛型的使用_1;

import java.util.ArrayList;
import java.util.List;

public class 泛型的使用_3_泛型的通配符 {
    public static void main(String[] args) {
        Dd dx1 = new Dd();

        List<C> dx2 = new ArrayList<C>();
        dx1.test1(dx2);// 本身
        List<A> dx3 = new ArrayList<A>();
        //dx1.test1(dx3);只能放他本身 和子类



        List<C> dx4 = new ArrayList<C>();
        dx1.test2(dx4);
        List<B> dx5 = new ArrayList<B>();// C 的父类
        dx1.test2(dx5);
        List<A> dx6 = new ArrayList<A>();// C 的父类的父类
        dx1.test2(dx6);



        List<IMPL> lia = new ArrayList<IMPL>();
        dx1.test3(lia);// 必须是 接口 的实现类
//        dx1.test3(A);
    }


}

class Dd{
    public  void test(List<?> list){
        //需要一个List  但不能确定是什么类型 可以用？代签
        /**
         * 同时 ？ 可以当做限制
         *  <? extendx  类> 他的本事  他的本身 和他的子类
         *  <? super 类>  他本身和父类
         *
         */
    }
    public  void  test1(List<? extends C> list){

    }
    public  void  test2(List<? super C> list){

    }
    //
    public void  test3(List<? extends IA> list){// list元素 是IA 的实现类

    }
}

class A{}
class B extends A{}
class C extends B{}
class D extends C{}

//接口
interface  IA{}
class IMPL implements IA{}